#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <queue>
#include <vector>

using namespace std;

struct ListNode {
    int val;
    ListNode* next;
    ListNode(int x) : val(x), next(NULL) {}
};

class Node {
   public:
    int val;
    Node* next;
    Node* random;

    Node(int _val) {
        val = _val;
        next = NULL;
        random = NULL;
    }
};

struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

class Solution {
    queue<TreeNode*> q;

   public:
    vector<vector<int> > levelOrder(TreeNode* root) {
        vector<vector<int> > ret;
        if (root == NULL)
            return ret;
        q.push(root);
        while (q.size() != 0) {
            vector<int> tmp;
            int q_size = q.size();
            for (int i = 0; i < q_size; i++) {
                tmp.push_back(q.front()->val);
                if (q.front()->left != NULL) {
                    q.push(q.front()->left);
                }
                if (q.front()->right != NULL) {
                    q.push(q.front()->right);
                }
                q.pop();
            }
            ret.push_back(tmp);
        }
        return ret;
    }
};

int main() {
    cout << "Hello, World!";
    TreeNode* t = new TreeNode(3);
    t->left = new TreeNode(9);
    t->right = new TreeNode(20);
    t->right->left = new TreeNode(15);
    t->right->right = new TreeNode(7);
    Solution().levelOrder(t);
    return 0;
}
